package com.rainbow.common.core.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.HashSet;
import java.util.Set;

/**
 * 通用自定义验证注解
 * @author 付为地
 */
@Documented
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface NeedCustomValid {

    /**
     * 是否必填
     * @return 是否必填
     */
    boolean required() default true;

    /**
     * 验证返回消息
     * @return 返回校验结果提示
     */
    String message() default "parameter.verification.error";

    /**
     * 初始化待验证参数全部范围
     * @return 返回初始化参数组
     */
    String[] initialize() default {};

    /**
     * 验证分组
     * @return 返回分组
     */
    Class<?>[] groups() default {};

    /**
     * 默认验证处理类，需要继承AbstractValidHandler
     * @return 返回处理类型
     */
    Class<?> customHandlerClass() default DefaultValidHandler.class;


    /**
     * 返回参数体
     * @return  返回参数体
     */
    Class<? extends Payload>[] payload() default {};

}